From 463b1bd46c99416a85ceda0b18110870aff93c51 Mon Sep 17 00:00:00 2001 From: robertl Date: Mon, 17 Mar 2008 16:56:29 +0000 Subject: [PATCH] NMEA: Parse time in GPGLL's as doubles, not ints, to preserve sscanf state for 'valid' flag. git-svn-id: http://gpsbabel.googlecode.com/svn/trunk@3149 f51c46e8-681c-474f-0cfe-069cfd0219fb --- gpsbabel/nmea.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/gpsbabel/nmea.c b/gpsbabel/nmea.c index de9ae50c4..5324f7fab 100644 --- a/gpsbabel/nmea.c +++ b/gpsbabel/nmea.c @@ -371,8 +371,9 @@ nmea_set_waypoint_time(waypoint *wpt, struct tm *time, int microseconds) static void gpgll_parse(char *ibuf) { - double latdeg, lngdeg; + double latdeg, lngdeg, microseconds; char lngdir, latdir; + double hmsd; int hms; char valid = 0; waypoint *waypt; @@ -382,14 +383,17 @@ gpgll_parse(char *ibuf) track_add_head(trk_head); } - sscanf(ibuf,"$GPGLL,%lf,%c,%lf,%c,%d,%c,", + sscanf(ibuf,"$GPGLL,%lf,%c,%lf,%c,%lf,%c,", &latdeg,&latdir, &lngdeg,&lngdir, - &hms,&valid); + &hmsd,&valid); if (valid != 'A') return; + hms = (int) hmsd; + microseconds = MILLI_TO_MICRO(1000 * (hmsd - hms)); + tm.tm_sec = hms % 100; hms = hms / 100; tm.tm_min = hms % 100; @@ -400,7 +404,7 @@ gpgll_parse(char *ibuf) waypt = waypt_new(); - nmea_set_waypoint_time(waypt, &tm, 0); + nmea_set_waypoint_time(waypt, &tm, microseconds); if (latdir == 'S') latdeg = -latdeg; waypt->latitude = ddmm2degrees(latdeg); -- 2.30.2